GdkWindow: Check device cursor first in update_cursor().
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 17 Aug 2010 13:39:03 +0000 (15:39 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 17 Aug 2010 13:45:17 +0000 (15:45 +0200)
gdk/gdkwindow.c

index bb2c5ebcb50f14eb9f955eabc7e14192d676e29c..0853375316c00e16997f3c217075e71e845b858a 100644 (file)
@@ -8671,6 +8671,7 @@ update_cursor (GdkDisplay *display,
   GdkWindowImplIface *impl_iface;
   GdkPointerWindowInfo *pointer_info;
   GdkDeviceGrabInfo *grab;
+  GdkCursor *cursor;
 
   pointer_info = _gdk_display_get_pointer_info (display, device);
   pointer_window = pointer_info->window_under_pointer;
@@ -8699,12 +8700,16 @@ update_cursor (GdkDisplay *display,
         parent->window_type != GDK_WINDOW_ROOT)
     cursor_window = parent;
 
+  cursor = g_hash_table_lookup (cursor_window->device_cursor, device);
+
+  if (!cursor)
+    cursor = cursor_window->cursor;
+
   /* Set all cursors on toplevel, otherwise its tricky to keep track of
    * which native window has what cursor set. */
   toplevel = (GdkWindowObject *) get_event_toplevel (pointer_window);
   impl_iface = GDK_WINDOW_IMPL_GET_IFACE (toplevel->impl);
-  impl_iface->set_device_cursor ((GdkWindow *) toplevel, device,
-                                 cursor_window->cursor);
+  impl_iface->set_device_cursor ((GdkWindow *) toplevel, device, cursor);
 }
 
 static gboolean